// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "media/cast/test/skewed_tick_clock.h"

#include "base/time/time.h"

namespace media {
namespace cast {
    namespace test {

        SkewedTickClock::SkewedTickClock(base::TickClock* clock)
            : clock_(clock)
            , skew_(1.0)
            , last_skew_set_time_(clock_->NowTicks())
            , skew_clock_at_last_set_(last_skew_set_time_)
        {
        }

        base::TimeTicks SkewedTickClock::SkewTicks(base::TimeTicks now)
        {
            return base::TimeDelta::FromMicroseconds(
                       (now - last_skew_set_time_).InMicroseconds() * skew_)
                + skew_clock_at_last_set_;
        }

        void SkewedTickClock::SetSkew(double skew, base::TimeDelta offset)
        {
            base::TimeTicks now = clock_->NowTicks();
            skew_clock_at_last_set_ = SkewTicks(now) + offset;
            skew_ = skew;
            last_skew_set_time_ = now;
        }

        base::TimeTicks SkewedTickClock::NowTicks()
        {
            return SkewTicks(clock_->NowTicks());
        }

    } // namespace test
} // namespace cast
} // namespace media
